iT邦幫忙

2023 iThome 鐵人賽

DAY 24
0
Software Development

從零開始的RISC-V ISA Simulator (Another Little RISC-V ISA Simulator)系列 第 24

Day 24 - BuildRoot,一鍵建立Linux Kernel的好方法

  • 分享至 

  • xImage
  •  

BuildRoot

BuildRoot是一個建立LinuxKernel的框架,整個BuildRoot是透過Kconfig和Makefile配置的,和編譯Linux kernel一樣,可以透過menuconfig修改,編譯出一個完整的kernel。

為什麼需要BuildRoot

傳統上我們編譯LinuxKernel時,我們需要先有對應的cross-compiler,並解決相關的相容性問題。同時為了讓我們編譯好的LinuxKernel有例如ld, ls, cd, mkdir等基本指令可以使用,我們通常會使用例如busybox等應用,busybox會幫我們生成基本的linux工具集,有了busybox後我們要產生對應的根目錄,並將之與Linux連結在一起,又或者根據平台的不同可以在開機後Load進來。而在一些更複雜的系統,我們還會需要例如u-boot等BootLoader,而包含busybox, BootLoader也都有各自的相依性要處理,常常讓我們在編譯的時候一個頭兩個大。

而BuildRoot,恰恰就是為了解決上述問題而生,在BuildRoot內我們可以選擇套用別人的defconfig,也可以再透過BuildRoot介面等進行修改,一鍵產生一個完整的LinuxKernel。

BuildRoot下載
https://buildroot.org/download.html
可以直接到官網下載每三個月Release一次的stable-release版本。

BuildRoot檔案結構

以下先羅列出比較會常進去看的資料夾,包含:

  • package : 包含底下各個應用的配置,包含下載位置等。
  • output : 輸出檔,包含host(主機運行的程式,包含cross-compiler等)build(所有應用編譯的位置,包含Linux, Busybox等)target(可視為rootfs的半成品)及images
  • dl : 包含所有下載下來的位置,在離線環境工作的朋友可以先準備好一包
  • configs : 包含各種版子的不同設置,例如qemu-riscv64-defconfig ... etc

BuildRoot使用
下載好BuildRoot後,我們首先要讀取一個defconfig,例如我們可以打

make qemu_riscv64_nommu_virt_defconfig

之後如果要編譯出qemu跑的版本,可以直接下

make 

而如果像我們一樣實現了一個與qemu環境不同的平台,則需要再去額外進行設定,包含但不限於

  1. make menuconfig 修改buildroot設定 (ISA, RootFs, MMU etc)
  2. make linux-menuconfig 修改linux設定 (ISA, FPU, MMU, SMP etc)

修改完成後再重新下 make,buildroot會自動幫我們下載並根據相依性先後建立好kernel所需的東西,直到把image檔案完成為止。

另外在使用時,如果有更改ISA等spec時,建議將整個資料夾移除後重新安裝,才不會出問題。


碎碎念:今天身體好多了,不過還是先把之後介紹BuildRoot的環節先拉到前面來講,明天再來補實作的部分。


上一篇
Day 23- System Instruction,與特權系統相關的指令們
下一篇
Day 25 - 64bit I-extension,ZiCSR測試及實作完成
系列文
從零開始的RISC-V ISA Simulator (Another Little RISC-V ISA Simulator)30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言